﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Insifo.WE;
using System.Text.RegularExpressions;
using System.Collections.Specialized;


public partial class genFeriadoEditar : ObjectPage
{
    #region CONSTANTES

    private const string RUTA_LISTA = "~/gen/genFeriadoListar.aspx";

    #endregion

    #region EVENTOS

    protected void Page_Load(object sender, EventArgs e)
    {
        //Eventos del Master
        Master.MenuAccionEvento += new MasterPageMenuEditarClickHandler(Master_MenuButton);
        if (!IsPostBack)
        {
            Cargar();
        }
    }

    protected void Master_MenuButton(object sender, EventArgs e)
    {
        string strAccion = ((CommandEventArgs)e).CommandName;
        switch (strAccion)
        {
            case "Aceptar":
                Guardar("G");
                break;
            case "Aplicar":
                Guardar("A");
                break;
            case "Cancelar":
                Salir();
                break;
        }
    }


    #endregion

    #region METODOS

    protected void Cargar()
    {
        string strAccion = Request.QueryString["a"];   //a: N-Nuevo, e-Editar, v-Ver
        string strId = Request.QueryString["i"];  //Id
        this.Master.MenuAceptar.Attributes.Add("OnClick", "javascript:return fnValidar();");

        Util.loadComboAndItem(ddlTipoFeriado, ListarParametroDetalle(Constantes.IDCOMPANIA, Constantes.IDAPLICACION_SYSTEM, Constantes.PARAMETRO_TIPOFERIADO), "Descripcion", "ParametroDetalle","--"+Resources.resDiccionario.Seleccionar+"--","0");
        
        //Cargar Estado 
        Util.loadCombo(ddlEstado, ListarParametroDetalle(Constantes.IDCOMPANIA, Constantes.IDAPLICACION_SYSTEM, Constantes.PARAMETRO_ESTADOREGISTRO), "Descripcion", "ParametroDetalle");

        switch (strAccion)
        {
            case "n":
                Master.SubTitulo.Text = Resources.resDiccionario.Nuevo;
                Nuevo();
                break;
            case "e":
                Master.SubTitulo.Text = Resources.resDiccionario.Editar;
                Editar(strAccion, strId);
                break;
            case "d":
                Master.SubTitulo.Text = Resources.resDiccionario.Inactivar;
                Editar(strAccion, strId);
                break;
            default:
                Master.SubTitulo.Text = Resources.resDiccionario.Unknow;
                break;
        }
    }

    protected void Nuevo()
    {
        hfIdFeriado.Value = "0";
        hfAccion.Value = "n"; //Nuevo
        txtIdFeriado.Text = string.Empty;
        txtFecha.Text = string.Empty;
        txtDescripcion.Text = string.Empty;

        txtFechaDesde.Text = "";
        txtFechaHasta.Text = "";

        ddlTipoFeriado.SelectedIndex = 0;

        //Datos de Auditoria
        ddlEstado.SelectedIndex = 0; //Representa el primero
        txtUsuarioCreacion.Text = string.Empty;
        txtFechaCreacion.Text = string.Empty;
        txtUsuarioModificacion.Text = string.Empty;
        txtFechaModificacion.Text = string.Empty;
    }

    protected void Editar(string pstrAccion, string pstrIdFeriado)
    {

        WCFeriado.BEFeriado be = new WCFeriado.BEFeriado
        {
            IdFeriado = Int32.Parse(pstrIdFeriado)
        };
        be = ObtenerFeriado(be);

        hfIdFeriado.Value = pstrIdFeriado;
        hfAccion.Value = pstrAccion; //Editar/Eliminar
        txtIdFeriado.Text = be.IdFeriado.ToString();
        txtFecha.Text = be.Fecha == null ? "" : ((DateTime)be.Fecha).ToString(AppSettings.FormatoFecha);
        txtDescripcion.Text = be.Descripcion;
        cbxCompensable.Checked = be.Compensable == "S" ? true : false;
        Util.SelectCombo(ddlTipoFeriado, be.TipoFeriado);
        txtFechaDesde.Text =  be.FechaDesde == null ? "" : ((DateTime)be.FechaDesde).ToString(AppSettings.FormatoFecha);
        txtFechaHasta.Text = be.FechaHasta == null ? "" : ((DateTime)be.FechaHasta).ToString(AppSettings.FormatoFecha);

        if (cbxCompensable.Checked) tbFecha.Style["display"] = "inline";
        else
            tbFecha.Style["display"] = "none";


        //Datos de Auditoria
        Util.SelectCombo(ddlEstado, be.Estado);
        txtUsuarioCreacion.Text = be.UsuarioCreacion;
        txtFechaCreacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
        txtUsuarioModificacion.Text = be.UsuarioModificacion;
        txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);

        if (pstrAccion == "d")
        {
            Master.MenuAplicar.Visible = false; //Remueve el boton aplicar
            txtDescripcion.Enabled = false;
            ddlEstado.Enabled = false;

            if (be.Estado == Constantes.ESTADO_ACTIVO)
            {
                Util.SelectCombo(ddlEstado, Constantes.ESTADO_INACTIVO);
            }
            else
            {
                Util.SelectCombo(ddlEstado, Constantes.ESTADO_ACTIVO);
            }
        }
    }

    protected bool Validar(out WCFeriado.BEFeriado pbe)
    {
        pbe = new WCFeriado.BEFeriado();
        string strCodigoOrigen = string.Empty, strDescripcion = string.Empty, strImagen = string.Empty;
        string strIdCliente = string.Empty;
        string strUsuario = string.Empty, strEstado = string.Empty;
        string strAccion = string.Empty;
        string strCompleto = string.Empty;
        string strCompensable = string.Empty;
        string strFecha = string.Empty, strFechaDesde = "", strFechaHasta = "";
        string strTipoFeriado = string.Empty;
        DateTime? dt = null;

        strFecha = txtFecha.Text.Trim();
        strAccion = hfAccion.Value; //a: n-Nuevo, e-Editar, v-Ver

        strCompensable = cbxCompensable.Checked ? "S" : "N";
        strDescripcion = txtDescripcion.Text.Trim();
        strTipoFeriado = ddlTipoFeriado.SelectedValue.ToString();

        strEstado = ddlEstado.SelectedValue;
        strUsuario = UsuarioSistema.CodigoUsuario;

        strFechaDesde = txtFechaDesde.Text.Trim();
        strFechaHasta = txtFechaHasta.Text.Trim();

        //Inicializa
        WCFeriado.BEFeriado be = new WCFeriado.BEFeriado
        {
            IdFeriado = Int32.Parse(hfIdFeriado.Value),
            Fecha = Util.ObtenerFechaCadena(strFecha, AppSettings.FormatoFecha),
            Descripcion = strDescripcion,
            Compensable = strCompensable,
            Estado = strEstado,
            TipoFeriado = strTipoFeriado.Trim(),
            FechaDesde = string.IsNullOrEmpty(strFechaDesde) == true ? dt : Util.ObtenerFechaCadena(strFechaDesde, AppSettings.FormatoFecha),
            FechaHasta = string.IsNullOrEmpty(strFechaHasta) == true ? dt : Util.ObtenerFechaCadena(strFechaHasta, AppSettings.FormatoFecha),

            UsuarioCreacion = strUsuario,
            FechaCreacion = DateTime.Now,
            UsuarioModificacion = strUsuario,
            FechaModificacion = DateTime.Now
        };
        pbe = be;
        return true;
    }

    protected void Guardar(string pstrEvento) //G:Grabar, A:Aplicar
    {
        string strAccion = string.Empty;
        string strUsuario = string.Empty;

        strAccion = hfAccion.Value; //a: n-Nuevo, e-Editar, v-Ver
        strUsuario = UsuarioSistema.CodigoUsuario;

        WCFeriado.BEFeriado be;

        if (!Validar(out be)) //Valida e Inicializa
        {
            return;
        }
        //Grabar
        switch (strAccion)
        {
            case "n": //Nuevo
                be = InsertarFeriado(be);
                if (be.Error != 0)
                {
                    Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", "Error al registrar el Feriado."));
                }
                hfAccion.Value = "e";
                hfIdFeriado.Value = be.IdFeriado.ToString();

                txtUsuarioCreacion.Text = strUsuario;
                txtFechaCreacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
                txtUsuarioModificacion.Text = strUsuario;
                txtFechaModificacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
                break;
            case "e": //Actualiza
                be = ActualizarFeriado(be);
                if (be.Error != 0)
                {
                    Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", "Error al actualizar el Feriado"));
                }
                txtUsuarioModificacion.Text = strUsuario;
                txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);

                break;
            case "d": //Elimina
                be = EliminaFeriado(be);
                txtUsuarioModificacion.Text = strUsuario;
                txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);

                if (be.Error != 0)
                {
                    Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", "Error al actualizar el Feriado."));
                }
                break;
        }
        if (pstrEvento == "G") { if (be.Error == 0) { Util.Redireciona(RUTA_LISTA, "?a=l", true); } }
    }

    protected void Salir()
    {
        Util.Redireciona(RUTA_LISTA, "?a=l", true);
    }

    #endregion

    #region LLAMDAS A WEBSERVICES

    /// <summary>
    /// Método Insertat Feriados
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCFeriado.BEFeriado InsertarFeriado(WCFeriado.BEFeriado pbe)
    {
        WCFeriado.BEFeriado be = new WCFeriado.BEFeriado();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCFeriado.IWCFeriado>("BasicHttpBinding_IWCFeriado"))
        {
            var response = client.ServiceOperation<WCFeriado.BEFeriado>(
               c => c.Insertar(pbe)
               );
            ;
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Obtiene Feriados
    /// </summary>
    /// <returns>Devuelve un Objeto</returns>
    protected WCFeriado.BEFeriado ObtenerFeriado(WCFeriado.BEFeriado pbe)
    {
        WCFeriado.BEFeriado be = new WCFeriado.BEFeriado();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCFeriado.IWCFeriado>("BasicHttpBinding_IWCFeriado"))
        {
            var response = client.ServiceOperation<WCFeriado.BEFeriado>(
               c => c.Obtener(pbe)
               );
            ;
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Actualiza Feriado
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCFeriado.BEFeriado ActualizarFeriado(WCFeriado.BEFeriado pbe)
    {
        WCFeriado.BEFeriado be = new WCFeriado.BEFeriado();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCFeriado.IWCFeriado>("BasicHttpBinding_IWCFeriado"))
        {
            var response = client.ServiceOperation<WCFeriado.BEFeriado>(
               c => c.Actualizar(pbe)
               );
            ;
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Elimina Feriado
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCFeriado.BEFeriado EliminaFeriado(WCFeriado.BEFeriado pbe)
    {
        WCFeriado.BEFeriado be = new WCFeriado.BEFeriado();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCFeriado.IWCFeriado>("BasicHttpBinding_IWCFeriado"))
        {
            var response = client.ServiceOperation<WCFeriado.BEFeriado>(
               c => c.Eliminar(pbe)
               );
            ;
            be = response;
        }
        return be;
    }



    /// <summary>
    /// Método Lista Datos de ParametroDetalle
    /// </summary>
    /// <returns>Devuelve un dataTable</returns>
    protected DataTable ListarParametroDetalle(int pintidCompania, int pintIdAplicacion, string pstrParametro)
    {
        WCParametroDetalle.BEParametroDetalle be = new WCParametroDetalle.BEParametroDetalle();
        be.IdCompania = pintidCompania;
        be.IdAplicacion = pintIdAplicacion;
        be.Parametro = pstrParametro;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCParametroDetalle.IWCParametroDetalle>("BasicHttpBinding_IWCParametroDetalle"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar(be).Tables[0]);
            dt = response;
        }
        return dt;
    }

    #endregion

}